package brau.domain;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Transient;

import brau.util.Utilitarios;

@Entity
@SequenceGenerator(name = "generatorEndereco", sequenceName = "enderecoId_seq", initialValue = 1, allocationSize = 1)
@Table(name = "ENDERECO")
public class Endereco implements Serializable {

	private static final long serialVersionUID = 1L;
    
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "generatorEndereco")
    private Long id;

    @Column(name = "CEP")
    private String cep;

    @Column(name = "LOGRADOURO")
    private String logradouro;

    @Column(name = "NUMERO", length=10)
    private String numero;

    @Column(name = "BAIRRO")
    private String bairro;
    
    @Column(name = "COMPLEMENTO")
    private String complemento;
    
    @Column(name = "LOCALIDADE")
    private String localidade;
    
    @Column(name = "UF", length=2)
    private String uf;

    @Column(name = "PAIS", length=2)
    private String pais;

    @Column(name = "SITUACAO")
    private Integer situacao;

    @Column(name = "PONTO_X")
    private Double pontoX;

    @Column(name = "PONTO_Y")
    private Double pontoY;

    @Transient
    private String enderecoCompleto;

    @Transient
    private String latLng;
    
	public Endereco() {
	}

	public Endereco(Long id) {
		super();
		this.id = id;
	}



	public Endereco(Long id, String cep, String logradouro, String numero, String bairro, String complemento,
			String localidade, String uf, String pais, Integer situacao, Double pontoX, Double pontoY) {
		super();
		this.id = id;
		this.cep = cep;
		this.logradouro = logradouro;
		this.numero = numero;
		this.bairro = bairro;
		this.complemento = complemento;
		this.localidade = localidade;
		this.uf = uf;
		this.pais = pais;
		this.situacao = situacao;
		this.pontoX = pontoX;
		this.pontoY = pontoY;
	}

	
	
	
	public Long getId() {
		return id;
	}

	
	public void setId(Long id) {
		this.id = id;
	}

	
	public String getCep() {
		return cep;
	}

	
	public void setCep(String cep) {
		this.cep = cep;
	}

	
	public String getLogradouro() {
		return logradouro;
	}

	
	public void setLogradouro(String logradouro) {
		this.logradouro = logradouro;
	}

	
	public String getNumero() {
		return numero;
	}

	
	public void setNumero(String numero) {
		this.numero = numero;
	}

	
	public String getBairro() {
		return bairro;
	}

	
	public void setBairro(String bairro) {
		this.bairro = bairro;
	}

	
	public String getComplemento() {
		return complemento;
	}

	
	public void setComplemento(String complemento) {
		this.complemento = complemento;
	}

	
	public String getLocalidade() {
		return localidade;
	}

	
	public void setLocalidade(String localidade) {
		this.localidade = localidade;
	}

	
	public String getUf() {
		return uf;
	}

	public void setUf(String uf) {
		this.uf = uf;
	}

	
	public String getPais() {
		return pais;
	}

	public void setPais(String pais) {
		this.pais = pais;
	}

	
	public Integer getSituacao() {
		return situacao;
	}

	
	public void setSituacao(Integer situacao) {
		this.situacao = situacao;
	}

	
	public Double getPontoX() {
		if (pontoX == null) pontoX = 0d;
		return pontoX;
	}

	
	public void setPontoX(Double pontoX) {
		this.pontoX = pontoX;
	}

	
	public Double getPontoY() {
		if (pontoY == null) pontoY = 0d;
		return pontoY;
	}

	
	public void setPontoY(Double pontoY) {
		this.pontoY = pontoY;
	}

	public String getEnderecoCompleto() {
		enderecoCompleto = "";
		if (logradouro != null && ! logradouro.isEmpty()) enderecoCompleto = logradouro;
		if (numero != null && ! numero.isEmpty()) enderecoCompleto += ", " + numero; else enderecoCompleto += ", S/N"; 
		if (complemento != null && ! complemento.isEmpty()) enderecoCompleto += ", " + complemento;
		if (bairro != null && ! bairro.isEmpty()) enderecoCompleto += ", " + bairro;
		if (localidade != null && ! localidade.isEmpty()) enderecoCompleto += ", " + localidade;
		if (uf != null && ! uf.isEmpty()) enderecoCompleto += "-" + uf;
		if (cep != null && ! cep.isEmpty()) enderecoCompleto += ", CEP:" + Utilitarios.mask(cep, "99.999-999");
		return enderecoCompleto;
	}

	public void setEnderecoCompleto(String enderecoCompleto) {
		this.enderecoCompleto = enderecoCompleto;
	}

	
	public String getLatLng() {
		latLng = getPontoX() + "," + getPontoY();
		return latLng;
	}

	public void setLatLng(String latLng) {
		if (latLng != null && ! latLng.isEmpty()) {
			setPontoX(Double.valueOf(latLng.split(",")[0]));
			setPontoY(Double.valueOf(latLng.split(",")[1]));
		}
		this.latLng = latLng;
	}

}
